package Offer;

/**
 * @author lakersUp
 * @Classname       singleNumber
 * @Description      数组中数字出现的次数 II
 *      解题思路 : 如果某一位能被3整除，那么这一位对只出现一次的那个数的这一肯定为0。
 *      如果某一位不能被3整除，那么只出现一次的那个数字的该位置一定为1.
 * @Date 2022/2/27 17:20
 * @Version 1.0
 */
public class Offer56singleNumber3 {
    public int singleNumber(int[] nums) {
        int[] k=new int[32];
        for(int j=0;j<nums.length;j++){
            for(int i=0;i<32;i++){
                k[i]+=(nums[j]>>i & 1)==1?1:0;
            }
        }
        int res=0;
        for(int i=31;i>=0;i--){
            res<<=1;
            if(k[i]%3==1){
                res=(res | 1);
            }
        }
        return res;
    }
}
